/* Procedura wyświetlania na pozycji wyświetlacza 7-segmentowego o numerze w r17 (skrajny prawy wyświetlacz ma numer zero) wizerunku zawartego w r16. Wizerunek ma mieć zera na pozycjach tych segmentów, które chcemy zaświecić. Kolejność segmentów dpGFEDCBA, tzn. MSB odpowiada kropce dziesiętnej zaś LSB segmentowi A */ ;wysw_jedna_poz wyswietla wizerunek z r16 na pozycji wyświetlacza o numerze podanym w r17 (0..7) wysw_jedna_poz: push r17 push r18 ldi r18, 0xfe ;bity 1..7 PA na wyjście out ddra,r18 ldi r18,8 ;licznik bitów petla: cbi porta,3 ;ustaw kolejny bit do transmisji na linii DS układu 595 sbrc r16,7 sbi porta,3 ;wpisz bit do rej przesuwnego sbi porta,1 ;przy zegarze 7.3728MHz czas trwania tego impulsu będzie: cbi porta,1 ;2 takty * ok.135 ns = 260ns, czyli wystarczająco długo lsl r16 ;podsuń kolejny bit ;Uwaga: bity przesyłamy od najstarszego przy założeniu, ;że w tablicy wizerunków bit dp odpowiadający kropce dziesiętnej jest najstarszy ;a bit odpowiadający segmentowi A jest najmłodszy dec r18 brne petla ;zwrócic uwagę, że chwilowo wstrzymujemy się z przepisaniem 8 bitów z rejestru przesuwnego układu 595 ;do jego wyjściowego zatrzasku równoległego ;teraz sterujemy numerem wyświetlacza ;czyli przygotowujemy adres odpowiedniej anody lsr r17 ;ustaw numer wyświetlacza na odpowiednich bitach, ale w odwrotnej kolejności rol r18 ;bo tak tego wymaga sposób podłączenia w makiecie (patrz schemat) lsr r17 rol r18 lsr r17 rol r18 lsl r18 ;najmłodszy bit numeru zapalanego wyświetlacza ma być bitem nr 7 portu A lsl r18 lsl r18 lsl r18 lsl r18 in r17,porta andi r17,0x1f ;pozostaw 5 młodszych bitów or r18,r17 ;dostaw numer wyświetlacza na bitach 5.-7. andi r18, 0b1110_1111 ;wyzeruj 4. bit portu A co oznacza wyłączenie wszystkich anod ;do czasu podania nowego zestawu pobudzeń katod out porta, r18 ;wysteruj nowym adresem anody, ale przy wyłączonej aktywności wszystkich anod ;wpisz 8 bitów z rejestru przesuwnego do zatrzasku równoległego 595 czyli pobudź nowy zestaw katod sbi porta,2 cbi porta,2 sbi porta,4 ;aktywuj anodę o nowym adresie czyli zapal kolejną pozycję wyświetlacza pop r18 pop r17 ret ;************************************************************************